// 引入 http 模块用于创建服务器
const http = require('http');
// 引入 fs 模块用于文件操作
const fs = require('fs');
// 引入 path 模块用于处理文件路径
const path = require('path');

// 获取要读取的文件路径：有命令行参数则取第一个，否则默认读取自身
const filePath = process.argv[2] || __filename;
// 解析为绝对路径
const resolvedFilePath = path.resolve(filePath);

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
  // 使用 fs.open 打开文件（'r' 表示只读）
  fs.open(resolvedFilePath, 'r', (openErr, fd) => {
    if (openErr) {
      // 文件打开失败（如不存在），返回错误信息
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end(`Error: File ${filePath} does not exist or cannot be opened.`);
      return;
    }

    // 定义缓冲区，用于存储读取的文件内容
    const buffer = Buffer.alloc(1024);
    // 使用 fs.read 读取文件内容
    fs.read(fd, buffer, 0, buffer.length, 0, (readErr, bytesRead) => {
      if (readErr) {
        // 读取过程出错
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end(`Error: Failed to read file ${filePath}.`);
        // 关闭文件描述符
        fs.close(fd, closeErr => {
          if (closeErr) console.error('Error closing file:', closeErr);
        });
        return;
      }

      // 提取有效数据（从缓冲区中读取实际读取的字节数）
      const fileContent = buffer.slice(0, bytesRead).toString('utf8');
      // 返回文件内容
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.end(fileContent);

      // 关闭文件描述符
      fs.close(fd, closeErr => {
        if (closeErr) console.error('Error closing file:', closeErr);
      });
    });
  });
});

// 服务器监听 8081 端口
server.listen(8081, () => {
  console.log(`Server is running at http://localhost:8081`);
  console.log(`Reading file: ${resolvedFilePath}`);
});